/*
第一个问题: 成为微博的开发者
1.去: open.weibo.com 完善开发者信息
2.微连接,选择移动应用,创建一个app应用
3.完善应用信息 -- 高级信息(回调网页) /测试信息(添加测试的账号)
4.纪录一些应用信息 --
第二个问题: Token -- Oauth认证
1. 第一个接口文档 -- 能够获取的数据就是一个 code , 用于调用access_token，接口获取授权后的access token
2. 第二个接口文档 --

第一步: App提供一个网页(网页内容是由服务器提供的)
https://api.weibo.com/oauth2/authorize?client_id=1016883931&redirect_uri=http://www.itcast.cn&response_type=code
//1016883931
//http://www.itcast.cn
第二步: 我们可以在网页里输入用户名和密码
第三步: 服务器会验证用户名和密码,然后返回网页一个 Code

http://www.itcast.cn/?code=b38d2c2cb6d9dddc47d752d9e53014dc

第四步: App通过一定的方式来获取Code

1.通过截取
2.

第五步: App通过这个Code来向服务器请求换取Token



第六步: 服务器验证一下Code,然后返回给App,Token


第七步: App可以通过Token来获取授权用户的数据

*/
/*
什么是Token

1.从服务器上获取数据,需要一定的权限,
2.权限从哪里来? -- 登陆之后,就有权限了!
3.
*/

/*
想拿到这个  http://www.itcast.cn/?code=b38d2c2cb6d9dddc47d752d9e53014dc
这个网址,怎么拿到?
1.对UIWebView做文章
2. UIWebView的代理方法 -> 设置代理,遵循协议,实现方法
3.怎么才能通过代理方法获取到 http://www.itcast.cn/?code=b38d2c2cb6d9dddc47d752d9e53014dc
*/


import UIKit

import AFNetworking

import SVProgressHUD
class CZLoginViewController: UIViewController,UIWebViewDelegate {

    
    //创建一个网页变量
    var webView :UIWebView?
    
    //调用加载视图的方法
    override func loadView() {
        
        webView = UIWebView()
        
        //设置代理对象
        webView?.delegate = self
        //赋值
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.whiteColor()
        
        
        setupNav()
        //设置请求的URL
        
        let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(App_KEY)&redirect_uri=\(App_URL)&response_type=code")
        
        
        //创建一个请求
        let request = NSURLRequest(URL: url!)
        
        //加载请求
        webView?.loadRequest(request)
        
        
    }
    
    private func setupNav(){
    
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "auto")
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dismiss")
    }
    
    //实现按钮方法
    func auto(){
    
    let js = "document.getElementById(\"userId\").value = \"15936284073\";document.getElementById(\"passwd\").value = \"jgyjkj\";"
        
        //注入到web界面
        
        webView?.stringByEvaluatingJavaScriptFromString(js)
    }
    
    func dismiss(){
    
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
    
    }
}

    //吧webview的代理方法写到这里
    extension CZLoginViewController{
    
        func webViewDidStartLoad(webView: UIWebView){
        
            /*
            1. show()就是一个默认的加载提示
            2. showErrorWithStatus("error")显示错误信息
            */
            SVProgressHUD.show()
        }
        //webview完成加载
        func webViewDidFinishLoad(webView: UIWebView) {
            //dismiss 消失
            SVProgressHUD.dismiss()
        }
        func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
            
            SVProgressHUD.dismiss()
            
        }
    //下面这个方法是重点，只要加载网页，就会走下面这个方法，默认返回是true
        func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
            
            //先判定是否为空  request.URL?.absoluteString url的绝对路径，可以将url转化为字符串
            //https://api.weibo.com/oauth2/authorize?client_id=2135037753&redirect_uri=http://www.baidu.com&response_type=code
            if let url = request.URL?.absoluteString {
                
                //截取
                
                //url.hasPrefix(<#T##prefix: String##String#>) 前缀
                //url.hasSuffix(<#T##suffix: String##String#>) 后缀
                //打印url
                
                if url.hasPrefix(App_URL){
                print(url)
                    
// http://www.itcast.cn/?code=50ad2019f300c02679e0b2d19e18ba90
 // 以 "="为分割,将字符串分割成 若干部分
//                    let subString = url.componentsSeparatedByString("=")
//                    
//                    print(subString)
//                    //                print(subString)// ["http://www.itcast.cn/?code", "096cc448972db3853b63a40d65d387ae"]
//                    
//                    if subString.count>0{
//                    
//                        let code = subString.last
//                        
//                        print(code)
//                    }
                    
                    //获取code的第二种方法  
                    if let code = request.URL?.query{
                    
                    print(code)
                        //可以再取截取
                        // code=50ad2019f300c02679e0b2d19e18ba90
                        //substringFromIndex->子字符串从 哪里开始 -> 从"code="之后返回那个子字符串
                        
                         let subCode = code.substringFromIndex("code=".endIndex)
                        
                        print(subCode)
                        
                        //根据得到的code获取token
                 CZUserViewModel().loadToken(subCode, success: { () -> () in
                        
                        //成功的回调
                        print("成功")
                    
                    //发送通知
                    NSNotificationCenter.defaultCenter().postNotificationName(kNotificaionChangeRootVC, object: nil)
                    
                    //授权成功之后返回首页
                    self.dismissViewControllerAnimated(true, completion: { () -> Void in
                        
                    })
                        }, failure: { () -> () in
                        //失败的回调
                            print("失败")
                    })
                        //返回一个false下面的页面就不显示
                        return false
                    }
                    
                }
                
                
            
            }
            return true
        }
    
    }
//根据code获取token
extension CZLoginViewController{

   
}
//根据token获取用户信息
extension CZLoginViewController{

   
}
